1. Field of the Invention
The present invention relates to programmable hardware devices, and in particular to hardware configuration loaders.
2. Description of Related Art
Bus-master devices such as network adaptors typically are equipped with their own processor and on-board programming. A bus-master device can thus carry out certain operations without requiring processing from an outside system CPU such as that of a PC. The device typically includes configurable memory registers for storing data that affect the behavior of the device. Such registers allow the device to be adapted for different applications.
Data can be loaded (e.g., transferred) from an external device to a receiving device's memory via an electrical connection such as a common bus or network connection. Typically, loading occurs upon system initialization and involves identifying physical memory addresses in the device and the size and direction of data transfer before the transfer is made.
Examples of other types of devices that require configuration are peripheral devices such as printers, disk drives and keyboards. These devices have driver programs that translate communications between the device and external devices such as programmable CPUs. The external programs cause a device to perform relevant functions including management functions such as waking up the device, initiating a boot process or loading up an operating system. Each device has its own set of specialized commands that only its driver knows. Many drivers come with the operating system of the device. For other devices, a driver may have to be loaded when the device is connected to the system.
Specific integrated circuit (IC) devices exist whose functionality can be substantially modified by changing on-chip functions or the connectivity between these functions. Application specific integrated circuits (“ASICs”), for example, are a type of IC device designed to perform a particular function by defining the interconnection of a set of basic circuit building blocks drawn from a library provided by the circuit manufacturer. Such devices include registers that can be loaded automatically with configuration data that affects the behavior of the circuit.
Configuration data can be loaded without the aid of the device's on-board processor by using a state machine which can read the commands and data. U.S. Pat. No. 6,640,262 describes a configuration loader which loads data including configuration data to a configurable integrated circuit upon initialization of a system in which a configurable integrated circuit is embedded. Commands and data elements are stored in non-volatile memory. If the initial address contains a command, depending upon the type of command, the contents of a next address in the non-volatile memory are written to a register space of the configurable integrated circuit, to a configuration space of the configurable integrated circuit, or to a command space of the configurable integrated circuit.
A disadvantage of this scheme is that it is limited by the manner in which commands and data elements are stored in non-volatile memory. The non-volatile memory is sequentially accessed without the capability of conditionally modifying the access sequence. For example, the above-described method cannot test the destination register (or some other register) first and modify the loading sequence in accordance with the result of the test.
System designers want virtually unlimited choices in core architectures, and the ability to customize several features to suit the application and design constraints at hand. This would allow designers to tune the device's instruction set architecture to the application's characteristics. The resulting device would remain programmable and, in principle, can run any application, but is optimized for a targeted application domain.
Accordingly, there is a need to control memory or register configuration without limitations to achieve greater functionality from a device. A device having such configuration control would make it adaptable to unforeseen applications. For the same reason, there is a need to provide devices with the ability to perform conditional testing on data registers and configure itself according to the test results. In addition, there is a need to move certain device management responsibilities from an external CPU to such devices thereby lowering management processing overhead. There is also a need for a configuration loader that is flexible in its operation and allows a configurable device to have an expandable architecture.